// uvm_tb/if/binary_alu_if.sv
`ifndef BINARY_ALU_IF_SV
`define BINARY_ALU_IF_SV

// This interface wraps the DUT's actual interfaces for UVM testbench
// DUT uses: aru_mul_cfg_if, aru_payload_if (x4)
interface binary_alu_if (
    input logic clk,
    input logic rst_n
);

    // ========================================================================
    // Configuration Channel (maps to aru_mul_cfg_if)
    // ========================================================================
    logic           cfg_vld;
    logic           cfg_rdy;
    logic     [2:0] cfg_mode;
    bf16_t          cfg_scalar;

    // ========================================================================
    // Top Input Channel (maps to aru_payload_if - top)
    // ========================================================================
    logic           top_vld;
    logic           top_rdy;
    aru_dat_t       top_dat;
    aru_sdb_t       top_sdb;

    // ========================================================================
    // Left Input Channel (maps to aru_payload_if - left)
    // ========================================================================
    logic           left_vld;
    logic           left_rdy;
    aru_dat_t       left_dat;
    aru_sdb_t       left_sdb;

    // ========================================================================
    // Bottom Input Channel (maps to aru_payload_if - bottom)
    // ========================================================================
    logic           bottom_vld;
    logic           bottom_rdy;
    aru_dat_t       bottom_dat;
    aru_sdb_t       bottom_sdb;

    // ========================================================================
    // Right Output Channel (maps to aru_payload_if - right/output)
    // ========================================================================
    logic           right_vld;
    logic           right_rdy;
    aru_dat_t       right_dat;
    aru_sdb_t       right_sdb;

    // // ========================================================================
    // // Modport for Driver (Active)
    // // ========================================================================
    // modport driver_mp (
    //     input  clk,
    //     input  rst_n,

    //     // Config channel - driver drives vld, mode, scalar; reads rdy
    //     output cfg_vld,
    //     input  cfg_rdy,
    //     output cfg_mode,
    //     output cfg_scalar,

    //     // Top input - driver drives
    //     output top_vld,
    //     input  top_rdy,
    //     output top_dat,
    //     output top_sdb,

    //     // Left input - driver drives
    //     output left_vld,
    //     input  left_rdy,
    //     output left_dat,
    //     output left_sdb,

    //     // Bottom input - driver drives
    //     output bottom_vld,
    //     input  bottom_rdy,
    //     output bottom_dat,
    //     output bottom_sdb,

    //     // Right output - driver reads vld/dat/sdb, drives rdy
    //     input  right_vld,
    //     output right_rdy,
    //     input  right_dat,
    //     input  right_sdb
    // );

    // // ========================================================================
    // // Modport for Monitor (Passive - all inputs)
    // // ========================================================================
    // modport monitor_mp (
    //     input clk,
    //     input rst_n,

    //     // All signals are inputs from monitor perspective
    //     input cfg_vld,
    //     input cfg_rdy,
    //     input cfg_mode,
    //     input cfg_scalar,

    //     input top_vld,
    //     input top_rdy,
    //     input top_dat,
    //     input top_sdb,

    //     input left_vld,
    //     input left_rdy,
    //     input left_dat,
    //     input left_sdb,

    //     input bottom_vld,
    //     input bottom_rdy,
    //     input bottom_dat,
    //     input bottom_sdb,

    //     input right_vld,
    //     input right_rdy,
    //     input right_dat,
    //     input right_sdb
    // );

endinterface : binary_alu_if

`endif  // BINARY_ALU_IF_SV
